import globals from 'globals'
import pluginJs from '@eslint/js'

// ESLint 核心插件
import pluginVue from 'eslint-plugin-vue'
import stylistic from '@stylistic/eslint-plugin'
import eslintPluginPrettierRecommended from 'eslint-plugin-prettier/recommended'
import eslintGlobals from './eslintrc-auto-import.mjs'
// import eslintrcAutoImport from './.eslintrc-auto-import.json' assert { type: 'json' }

/** @type {import('eslint').Linter.Config[]} */
export default [
    /** js推荐配置 */
    pluginJs.configs.recommended,
    /** vue推荐配置 */
    ...pluginVue.configs['flat/recommended'],
    stylistic.configs.customize({
        indent: 2,
        quotes: 'single',
        semi: false,
        jsx: true,
        braceStyle: '1tbs',
        arrowParens: 'always'
    }),
    /**
     * javascript 规则
     */
    {
        files: ['**/*.{js,mjs,cjs,vue}'],
        rules: {
            'no-unused-vars': 'error',
            'no-undef': 'error',
            'no-console': 'off',
            'vue/multi-word-component-names': 'off'
            // 如果组件名称为 index，ESLint 就会忽略此次组件名称的检查
            // 'vue/multi-word-component-names': [
            //   'warn',
            //   {
            //     // 指定需要忽略的组件名称
            //     ignores: ['index', 'home']
            //   }
            // ]
        }
    },
    /**
     * 配置全局变量
     */
    {
        languageOptions: {
            globals: {
                ...globals.browser, // 浏览器变量 (window, document 等)
                ...globals.node, // Node.js 变量 (process, require 等)
                ...eslintGlobals,
                uni: true,
                getApp: true,
                plus: true
            }
        }
    },
    /**
     * 添加忽略的文件或目录
     */
    {
        ignores: [
            'build/*.js',
            'src/assets',
            'src/zjark',
            'src/manifest.json',
            'dist',
            'public',
            'node_modules',
            'uni_modules',
            'nativeplugins',
            'js_sdk',
            'microapp',
            '**/*.min.js',
            '**/*.config.mjs',
            '**/*.tsbuildinfo'
        ]
    },
    /**
     * vue 规则
     */
    {
        files: ['**/*.vue'],
        rules: {
            // 在这里追加 vue 规则
            'vue/no-mutating-props': [
                'error',
                {
                    shallowOnly: true
                }
            ]
        }
    },
    /**
     * prettier 配置
     * 会合并根目录下的prettier.config.mjs 文件
     * @see https://prettier.io/docs/en/options
     */
    eslintPluginPrettierRecommended
]
